from collections import deque


class WeatherDataManager:
    """
    气象数据管理类
    功能：存储当前气象数据及最近10次历史记录
    数据参数：温度(℃)、湿度(%)、气压(hPa)、风向(°)、风速(m/s)
    """

    def __init__(self):
        """
        初始化数据结构
        - current_data: 存储当前最新数据（字典格式）
        - history_data: 存储最近10次历史数据（双端队列）
        """
        self.current_data = {
            'temperature': None,
            'humidity': None,
            'pressure': None,
            'wind_direction': None,
            'wind_speed': None
        }
        self.history_data = deque(maxlen=10)  # 自动保持最多10条记录

    def add_data(self, temp, humi, pres, w_dir, w_speed):
        """
        添加新数据记录
        参数说明：
        temp: 温度（浮点型）
        humi: 湿度（整型）
        pres: 气压（整型）
        w_dir: 风向（0-360度）
        w_speed: 风速（非负数）
        """
        # 保存当前数据到字典
        self.current_data = {
            'temperature': float(temp),
            'humidity': int(humi),
            'pressure': int(pres),
            'wind_direction': w_dir % 360,  # 标准化角度值
            'wind_speed': max(0.0, w_speed)  # 确保非负
        }

        # 将当前数据存入历史记录（自动维持10条）
        self.history_data.append(self.current_data.copy())

    def get_current_data(self):
        """
        获取当前最新数据
        返回：包含当前气象数据的字典
        """
        return self.current_data

    def get_history_data(self):
        """
        获取历史数据列表
        返回：按时间倒序排列的最近10条记录（最新在前）
        """
        return list(self.history_data)[::-1]  # 转换为列表并反转顺序

    def clear_data(self):
        """
        清空所有存储数据
        """
        self.current_data = {k: None for k in self.current_data}
        self.history_data.clear()

weather_mgr = WeatherDataManager()

if __name__ == '__main__':
    # 初始化管理器
    # weather_mgr = WeatherDataManager()

    # 添加模拟数据（参数顺序：温度,湿度,气压,风向,风速）
    weather_mgr.add_data(25.3, 65, 1013, 270, 3.5)
    weather_mgr.add_data(24.8, 68, 1012, 265, 4.2)

    # 获取当前数据
    current = weather_mgr.get_current_data()
    print(f"当前温度：{current['temperature']}℃")

    # 获取历史记录（最多10条）
    history = weather_mgr.get_history_data()
    print(f"已存储{len(history)}条历史记录")
    print(history)